package com.stone.design.mode.chain;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.stream.Stream;

/**
 * @author wenpanfeng
 */
@Slf4j
@Service
public class StockValidate extends ValidatorHandler<RefundForBaseDTO, RefundTransferDTO> {

    @Resource
    private PayStockService payStockService;

    /**
     * @param dto         入参
     * @param transferDTO 需要在责任链上传递的参数
     * @author Mr_wenpan@163.com 2021/3/13 1:36 下午
     */
    @Override
    protected void validate(RefundForBaseDTO dto, RefundTransferDTO transferDTO) {

        // TODO: 2020/11/24 每个子类节点在这里做具体校验逻辑
        // payStockService.xxoo(dto, transferDTO);
    }

    /**
     * 支持的退费场景，这里相当于返回一个type，用于判断是否该当前节点执行验证方法
     * 比如： 满足 MATERIALS 或 NORMAL 条件则执行当前节点的 validate
     */
    @Override
    protected Stream<String> supports() {
        return Stream.of(RefundTypeEnum.MATERIALS.name(), RefundTypeEnum.NORMAL.name());
    }

    /**
     * 校验器加载的顺序，用于构建责任链节点顺序用，这个order可以抽取到父类 ValidatorHandler 中去
     */
    @Override
    protected int getOrder() {
        return 80;
    }

}